راهنمای جامع طراحی فرم در وب‌سایت | اصول UX و اعتبارسنجی فرم

توسعه‌دهنده فرانت‌اند

راهنمای جامع طراحی فرم در وب‌سایت | اصول UX و اعتبارسنجی فرم

با اصول طراحی فرم در وب‌سایت آشنا شوید؛ از فیلدهای ورودی و پیام‌های خطا تا اعتبارسنجی، دسترس‌پذیری و پیاده‌سازی فرم با HTML، CSS و React.

راهنمای جامع طراحی فرم در وب‌سایت | اصول UX و اعتبارسنجی فرم

صارم توکلی

توسعه‌دهنده فرانت‌اند

۱۴۰۵/۸/۱۶
۵ نفر
۱۹ دقیقه مطالعه

مقدمه

فرم‌ها یکی از مهم‌ترین بخش‌های تعاملی هر وب‌سایت هستند. از ثبت‌نام و ورود کاربران گرفته تا ثبت سفارش، ارسال درخواست، جست‌وجو و دریافت اطلاعات، بخش بزرگی از تعامل کاربران با وب‌سایت از طریق فرم‌ها انجام می‌شود.

با وجود ظاهر نسبتاً ساده، طراحی فرم یکی از بخش‌هایی است که می‌تواند تأثیر زیادی بر تجربه کاربری داشته باشد. اگر فیلدها نامشخص باشند، پیام‌های خطا به‌درستی نمایش داده نشوند یا فرایند تکمیل فرم بیش از حد طولانی باشد، احتمال رها کردن آن توسط کاربران افزایش پیدا می‌کند.

یک فرم حرفه‌ای فقط مجموعه‌ای از Inputها و دکمه‌ها نیست؛ بلکه باید مسیر مشخصی برای دریافت اطلاعات ایجاد کند، از ورود داده‌های اشتباه جلوگیری کند و بازخورد مناسبی به کاربر ارائه دهد.

در این مقاله با انواع فرم در طراحی وب، اصول تجربه کاربری، طراحی فیلدهای ورودی، اعتبارسنجی اطلاعات، دسترس‌پذیری و روش پیاده‌سازی فرم با HTML، CSS و React آشنا می‌شویم.

۱. فرم در طراحی وب چیست؟

فرم (Form) بخشی از رابط کاربری است که برای دریافت اطلاعات از کاربران و ارسال آن‌ها به یک سیستم یا سرویس استفاده می‌شود.

کاربران از طریق فرم می‌توانند اطلاعات موردنیاز را وارد کنند، گزینه‌های مختلف را انتخاب کنند و یک عملیات مشخص را انجام دهند.

یک فرم معمولی ممکن است شامل عناصر زیر باشد:

  • Label: عنوان یا توضیح مربوط به هر فیلد.

  • Input: دریافت اطلاعاتی مانند نام، ایمیل و شماره تلفن.

  • Textarea: دریافت متن‌های طولانی‌تر.

  • Select: انتخاب یک گزینه از فهرست.

  • Checkbox: انتخاب یک یا چند گزینه مستقل.

  • Radio Button: انتخاب یک گزینه از میان چند گزینه.

  • Button: ارسال فرم یا اجرای یک عملیات.

هدف اصلی فرم، ایجاد یک ارتباط ساده، قابل‌فهم و قابل‌اعتماد میان کاربر و سیستم است.

۲. انواع فرم در وب‌سایت

فرم‌ها بر اساس هدف و نوع اطلاعات موردنیاز به دسته‌های مختلفی تقسیم می‌شوند.

۲.۱. فرم ثبت‌نام (Registration Form)

فرم ثبت‌نام برای ایجاد حساب کاربری جدید استفاده می‌شود. این فرم معمولاً اطلاعاتی مانند نام، ایمیل، شماره تلفن و رمز عبور را دریافت می‌کند.

نکات مهم در طراحی:

  • دریافت حداقل اطلاعات ضروری.

  • نمایش واضح شرایط رمز عبور.

  • امکان مشاهده و مخفی کردن رمز عبور.

  • اعتبارسنجی اطلاعات قبل از ارسال.

  • نمایش وضعیت موفقیت یا خطا.

در بسیاری از پروژه‌ها، دریافت اطلاعات غیرضروری در مرحله ثبت‌نام می‌تواند باعث طولانی شدن فرایند و کاهش تمایل کاربران به تکمیل فرم شود.

۲.۲. فرم ورود (Login Form)

فرم ورود برای احراز هویت کاربران و دسترسی به حساب کاربری استفاده می‌شود.

این فرم معمولاً شامل ایمیل یا شماره تلفن، رمز عبور و دکمه ورود است.

در برخی سیستم‌ها، ورود با رمز یک‌بارمصرف (OTP) نیز جایگزین یا مکمل رمز عبور می‌شود.

نکات UX:

  • نمایش پیام خطای واضح.

  • امکان مشاهده رمز عبور.

  • دسترسی ساده به بازیابی رمز عبور.

  • جلوگیری از پاک شدن اطلاعات در صورت بروز خطا.

  • نمایش وضعیت در حال پردازش هنگام ارسال.

۲.۳. فرم تماس با ما (Contact Form)

فرم تماس با ما به کاربران اجازه می‌دهد پیام‌ها، درخواست‌ها یا پرسش‌های خود را برای مجموعه ارسال کنند.

فیلدهای رایج این فرم عبارت‌اند از:

  • نام و نام خانوادگی

  • آدرس ایمیل

  • موضوع پیام

  • متن درخواست

در طراحی فرم تماس بهتر است فیلدها به اطلاعات ضروری محدود شوند تا کاربر بتواند در زمان کوتاهی پیام خود را ارسال کند.

۲.۴. فرم جست‌وجو (Search Form)

فرم جست‌وجو یکی از ساده‌ترین اما پرکاربردترین فرم‌های وب‌سایت است.

این فرم معمولاً شامل یک فیلد ورودی و یک دکمه یا آیکون جست‌وجو است.

در فروشگاه‌های اینترنتی و وب‌سایت‌های محتوایی، جست‌وجوی مناسب می‌تواند پیدا کردن محصولات یا مقالات را سریع‌تر کند.

ویژگی‌های مهم:

  • Placeholder قابل‌فهم.

  • امکان ارسال با کلید Enter.

  • نمایش پیشنهادهای مرتبط در صورت نیاز.

  • مدیریت عبارت‌های خالی.

  • نمایش نتیجه مناسب برای جست‌وجوهای بدون پاسخ.

۲.۵. فرم سفارش و پرداخت (Checkout Form)

فرم سفارش برای دریافت اطلاعات لازم جهت تکمیل خرید استفاده می‌شود.

این فرم ممکن است شامل اطلاعات شخصی، نشانی ارسال، روش ارسال و اطلاعات پرداخت باشد.

در طراحی این نوع فرم باید مراحل خرید تا حد امکان واضح باشند و کاربر بداند در هر مرحله چه اطلاعاتی نیاز است.

بهتر است اطلاعات غیرضروری حذف شوند و خطاهای مربوط به هر مرحله به‌صورت مشخص نمایش داده شوند.

۲.۶. فرم چندمرحله‌ای (Multi-step Form)

در فرم‌های چندمرحله‌ای، اطلاعات موردنیاز در چند بخش جداگانه دریافت می‌شوند.

برای مثال، فرایند ثبت سفارش می‌تواند شامل سه مرحله باشد:

  1. اطلاعات شخصی

  2. اطلاعات ارسال

  3. بررسی و تأیید سفارش

این الگو برای فرم‌های طولانی مناسب است؛ زیرا به‌جای نمایش تمام فیلدها در یک صفحه، اطلاعات را به بخش‌های کوچک‌تر تقسیم می‌کند.

نکات طراحی:

  • نمایش مرحله فعلی.

  • امکان بازگشت به مراحل قبلی.

  • حفظ اطلاعات واردشده.

  • اعتبارسنجی هر مرحله قبل از ادامه.

  • نمایش خلاصه اطلاعات قبل از ثبت نهایی.

۳. اصول مهم طراحی فرم از دیدگاه UX

طراحی فرم باید به شکلی باشد که کاربران بتوانند بدون سردرگمی اطلاعات موردنیاز را وارد کنند.

۳.۱. سادگی و کاهش تعداد فیلدها

هر فیلد اضافی می‌تواند زمان تکمیل فرم را افزایش دهد.

بهتر است قبل از طراحی، مشخص شود هر اطلاعات دقیقاً برای چه هدفی دریافت می‌شود.

اگر اطلاعاتی برای انجام عملیات ضروری نیست، بهتر است دریافت آن به مرحله دیگری موکول شود یا اصلاً از فرم حذف شود.

۳.۲. ترتیب منطقی فیلدها

فیلدها باید بر اساس جریان طبیعی تکمیل اطلاعات مرتب شوند.

برای مثال، در فرم ثبت‌نام معمولاً بهتر است ابتدا اطلاعات هویتی، سپس اطلاعات ارتباطی و در نهایت اطلاعات امنیتی دریافت شوند.

۳.۳. گروه‌بندی اطلاعات مرتبط

در فرم‌های طولانی، قرار دادن تمام فیلدها در یک بخش باعث افزایش پیچیدگی می‌شود.

می‌توان اطلاعات مرتبط را در گروه‌هایی مانند «اطلاعات شخصی»، «اطلاعات تماس» و «اطلاعات حساب کاربری» قرار داد.

۳.۴. نمایش واضح فیلدهای ضروری

کاربر باید بداند کدام فیلدها اجباری هستند و کدام‌یک اختیاری‌اند.

برای مثال می‌توان از علامت ستاره در کنار Label یا توضیحی کوتاه در ابتدای فرم استفاده کرد.

۳.۵. ارائه بازخورد مناسب

بعد از هر تعامل مهم، فرم باید بازخورد مشخصی ارائه دهد.

برای مثال:

  • پس از ارسال موفق، پیام تأیید نمایش داده شود.

  • هنگام ارسال، دکمه وارد وضعیت Loading شود.

  • در صورت بروز خطا، دلیل مشکل مشخص شود.

  • پس از اصلاح اطلاعات، وضعیت خطا به‌روزرسانی شود.

۴. طراحی حرفه‌ای فیلدهای ورودی (Input Fields)

فیلدهای ورودی مهم‌ترین عناصر یک فرم هستند. طراحی مناسب آن‌ها باید ورود اطلاعات را ساده و قابل‌فهم کند.

۴.۱. Label و Placeholder چه تفاوتی دارند؟

Label عنوانی است که نوع اطلاعات موردنیاز را مشخص می‌کند.

Placeholder نمونه‌ای از اطلاعات یا راهنمای کوتاهی است که داخل فیلد نمایش داده می‌شود.

برای مثال:

یکی از اشتباهات رایج این است که Placeholder به‌تنهایی جایگزین Label شود. با وارد کردن اطلاعات، Placeholder ناپدید می‌شود و ممکن است کاربر دیگر نداند هر فیلد برای چه اطلاعاتی بوده است.

بنابراین، بهتر است Label مستقل و قابل‌مشاهده باشد.

۴.۲. انتخاب نوع مناسب Input

HTML انواع مختلفی از فیلدهای ورودی را در اختیار توسعه‌دهندگان قرار می‌دهد.

نوع Input

کاربرد

text

دریافت متن

email

دریافت آدرس ایمیل

password

دریافت رمز عبور

tel

دریافت شماره تلفن

number

دریافت مقدار عددی

date

انتخاب تاریخ

search

دریافت عبارت جست‌وجو

url

دریافت آدرس وب

انتخاب نوع مناسب Input می‌تواند تجربه ورود اطلاعات را در دستگاه‌های مختلف بهتر کند.

برای مثال، استفاده از type="email" به مرورگر کمک می‌کند ورودی را متناسب با ایمیل مدیریت کند.

۴.۳. طراحی Textarea

Textarea برای دریافت متن‌های طولانی مانند توضیحات، پیام‌ها و نظرات استفاده می‌شود.

در طراحی آن باید ارتفاع اولیه مناسب، امکان مشاهده متن و رفتار مشخص هنگام افزایش محتوا در نظر گرفته شود.

۴.۴. طراحی Select و Dropdown

Select زمانی کاربرد دارد که کاربر باید یک گزینه را از میان چند انتخاب مشخص کند.

اگر تعداد گزینه‌ها محدود باشد، Select استاندارد HTML معمولاً انتخاب مناسبی است. اما برای فهرست‌های بزرگ می‌توان از کامپوننت‌های جست‌وجوپذیر استفاده کرد.

در هر حالت باید امکان انتخاب با کیبورد و نمایش وضعیت انتخاب‌شده فراهم باشد.

۴.۵. طراحی Checkbox و Radio

Checkbox برای انتخاب چند گزینه مستقل استفاده می‌شود؛ در حالی که Radio Button برای انتخاب یک گزینه از میان چند گزینه مرتبط مناسب است.

برای مثال، انتخاب چند علاقه‌مندی با Checkbox و انتخاب یک روش ارسال با Radio انجام می‌شود.

۵. وضعیت‌های مختلف فیلدهای فرم (Input States)

یک فیلد ورودی فقط یک حالت ثابت ندارد. رفتار آن در زمان تعامل کاربر باید به‌درستی طراحی شود.

مهم‌ترین وضعیت‌ها عبارت‌اند از:

وضعیت

توضیح

Default

حالت اولیه فیلد

Hover

هنگام قرار گرفتن نشانگر روی فیلد

Focus

هنگام فعال شدن فیلد

Filled

زمانی که فیلد دارای مقدار است

Error

زمانی که مقدار نامعتبر است

Success

زمانی که مقدار معتبر تشخیص داده شده است

Disabled

زمانی که فیلد غیرفعال است

Read Only

زمانی که مقدار قابل مشاهده اما غیرقابل ویرایش است

برای مثال، هنگام Focus می‌توان رنگ Border را تغییر داد و هنگام Error علاوه بر تغییر رنگ، پیام توضیحی نیز نمایش داد.

نکته مهم این است که وضعیت‌های مختلف نباید فقط با رنگ از یکدیگر متمایز شوند. استفاده از متن، آیکون یا نشانه‌های بصری دیگر به درک بهتر کاربران کمک می‌کند.

۶. اعتبارسنجی فرم (Form Validation)

اعتبارسنجی یکی از مهم‌ترین بخش‌های طراحی و پیاده‌سازی فرم است.

هدف از اعتبارسنجی، بررسی اطلاعات واردشده و اطمینان از مطابقت آن‌ها با شرایط موردنیاز سیستم است.

برای مثال، در فرم ثبت‌نام ممکن است لازم باشد ایمیل ساختار معتبری داشته باشد و رمز عبور حداقل طول مشخصی را رعایت کند.

۶.۱. اعتبارسنجی سمت کاربر (Client-side Validation)

در این روش، بررسی اطلاعات در مرورگر کاربر انجام می‌شود.

مزیت اصلی آن این است که کاربر می‌تواند سریع‌تر متوجه اشتباه خود شود و برای دریافت پاسخ نیازی به ارسال درخواست به سرور ندارد.

برای مثال، می‌توان خالی نبودن فیلد یا ساختار اولیه ایمیل را پیش از ارسال بررسی کرد.

اما اعتبارسنجی سمت کاربر به‌تنهایی کافی نیست؛ زیرا امکان دور زدن یا دستکاری آن وجود دارد.

۶.۲. اعتبارسنجی سمت سرور (Server-side Validation)

در اعتبارسنجی سمت سرور، اطلاعات دریافت‌شده مجدداً در محیط بک‌اند بررسی می‌شوند.

این مرحله برای امنیت و صحت داده‌ها ضروری است.

حتی اگر اطلاعات در مرورگر معتبر تشخیص داده شده باشند، سرور باید آن‌ها را مستقل از نتیجه اعتبارسنجی سمت کاربر بررسی کند.

اصل مهم: هرگز به اعتبارسنجی سمت کلاینت به‌عنوان یک لایه امنیتی مستقل اعتماد نکنید.

۶.۳. انواع قوانین اعتبارسنجی

قوانین اعتبارسنجی با توجه به نوع اطلاعات متفاوت هستند.

قانون

کاربرد

نمونه

Required

اجباری بودن فیلد

نام کاربر

Min Length

حداقل تعداد کاراکتر

رمز عبور

Max Length

حداکثر تعداد کاراکتر

توضیحات

Email

بررسی ساختار ایمیل

user@example.com

Pattern

بررسی الگوی مشخص

کد پستی

Min / Max

محدودیت عددی

تعداد محصولات

Confirm

تطبیق دو مقدار

تکرار رمز عبور

باید توجه داشت که معتبر بودن ساختار یک ایمیل به معنی وجود واقعی یا قابل‌دسترسی بودن آن نیست. بررسی برخی اطلاعات به مراحل دیگری مانند تأیید ایمیل نیاز دارد.

۶.۴. چه زمانی خطا را نمایش دهیم؟

نمایش خطا بلافاصله با اولین تغییر کاربر همیشه تجربه مناسبی ایجاد نمی‌کند.

روش‌های رایج عبارت‌اند از:

  • On Change: بررسی هنگام تغییر مقدار.

  • On Blur: بررسی پس از خارج شدن کاربر از فیلد.

  • On Submit: بررسی هنگام ارسال فرم.

برای بسیاری از فرم‌ها، ترکیب On Blur و On Submit انتخاب مناسبی است. به این ترتیب، کاربر هنگام شروع تایپ با پیام خطای زودهنگام مواجه نمی‌شود، اما پیش از ارسال نیز خطاها مشخص خواهند شد.

۶.۵. نمایش پیام خطای مناسب

پیام خطا باید مشخص کند چه مشکلی وجود دارد و کاربر چگونه می‌تواند آن را برطرف کند.

نمونه پیام‌های مناسب:

  • «وارد کردن ایمیل ضروری است.»

  • «فرمت ایمیل واردشده معتبر نیست.»

  • «رمز عبور باید حداقل ۸ کاراکتر باشد.»

  • «تکرار رمز عبور با مقدار واردشده مطابقت ندارد.»

پیام‌هایی مانند «خطای نامشخص» یا «مقدار نامعتبر» بدون توضیح بیشتر، کمک زیادی به کاربر نمی‌کنند.

۷. طراحی وضعیت ارسال فرم و پیام‌های بازخورد

بعد از تکمیل فیلدها، کاربر باید فرم را ارسال کند. در این مرحله نیز طراحی مناسب اهمیت زیادی دارد.

۷.۱. وضعیت Loading

پس از کلیک روی دکمه ارسال، ممکن است درخواست به سرور زمان‌بر باشد.

در این حالت بهتر است:

  • وضعیت در حال ارسال نمایش داده شود.

  • از ارسال چندباره درخواست جلوگیری شود.

  • متن دکمه به عبارتی مانند «در حال ارسال...» تغییر کند.

  • وضعیت دکمه برای کاربران قابل تشخیص باشد.

۷.۲. وضعیت Success

پس از ثبت موفق اطلاعات، باید پیام واضحی به کاربر نمایش داده شود.

برای مثال:

«درخواست شما با موفقیت ثبت شد. نتیجه از طریق ایمیل اطلاع‌رسانی خواهد شد.»

این پیام باید نتیجه عملیات را توضیح دهد و در صورت نیاز، مرحله بعدی را مشخص کند.

۷.۳. وضعیت Error

اگر ارسال فرم با مشکل مواجه شود، باید پیام مناسبی نمایش داده شود.

برای مثال:

«ارسال اطلاعات با مشکل مواجه شد. لطفاً چند لحظه دیگر دوباره تلاش کنید.»

بهتر است اطلاعات واردشده کاربر بدون دلیل پاک نشوند تا مجبور نباشد فرم را از ابتدا تکمیل کند.

۸. طراحی فرم واکنش‌گرا (Responsive Form Design)

فرم‌ها باید در اندازه‌های مختلف نمایشگر قابل استفاده باشند.

در دسکتاپ می‌توان برخی فیلدهای مرتبط را در یک ردیف قرار داد، اما در موبایل معمولاً نمایش عمودی فیلدها تجربه مناسب‌تری ایجاد می‌کند.

نکات مهم:

  • استفاده از عرض مناسب برای فیلدها.

  • حفظ فاصله کافی میان عناصر.

  • جلوگیری از کوچک شدن بیش از حد متن‌ها.

  • استفاده از اندازه مناسب برای نواحی قابل لمس.

  • جلوگیری از خروج فرم از عرض نمایشگر.

  • نمایش واضح پیام‌های خطا در موبایل.

در فرم‌های چندستونه نیز باید ترتیب حرکت با کیبورد و جریان منطقی ورود اطلاعات حفظ شود.

۹. دسترس‌پذیری در طراحی فرم (Form Accessibility)

فرم باید برای کاربران مختلف، از جمله افرادی که از صفحه‌کلید یا فناوری‌های کمکی استفاده می‌کنند، قابل استفاده باشد.

مهم‌ترین اصول دسترس‌پذیری عبارت‌اند از:

استفاده از Label واقعی: هر فیلد باید عنوان مشخصی داشته باشد که از نظر فنی به Input مربوط متصل باشد.

پشتیبانی از صفحه‌کلید: کاربران باید بتوانند با کلید Tab بین فیلدها حرکت کنند و با کلیدهای مناسب گزینه‌ها را انتخاب کنند.

نمایش Focus: وضعیت فوکوس باید به‌وضوح قابل مشاهده باشد.

معرفی خطا به فناوری‌های کمکی: پیام خطا باید به فیلد مربوط متصل شود. ویژگی‌هایی مانند aria-describedby و aria-invalid در این زمینه کاربرد دارند.

عدم وابستگی صرف به رنگ: برای نمایش خطا نباید فقط از Border قرمز استفاده شود؛ متن توضیحی نیز لازم است.

حفظ ترتیب منطقی: ترتیب حرکت بین فیلدها باید با ساختار بصری فرم هماهنگ باشد.

منبع پیشنهادی: W3C WAI - Forms Tutorial

۱۰. پیاده‌سازی فرم با HTML و CSS

برای شروع پیاده‌سازی، ابتدا ساختار معنایی فرم را با HTML ایجاد می‌کنیم.

۱۰.۱. ساختار HTML

<form class="contact-form">
  <div class="form-field">
    <label for="name">نام و نام خانوادگی</label>

    <input
      id="name"
      name="name"
      type="text"
      placeholder="نام خود را وارد کنید"
      required
    />
  </div>

  <div class="form-field">
    <label for="email">آدرس ایمیل</label>

    <input
      id="email"
      name="email"
      type="email"
      placeholder="example@email.com"
      required
    />
  </div>

  <div class="form-field">
    <label for="message">پیام شما</label>

    <textarea
      id="message"
      name="message"
      rows="5"
      required
    ></textarea>
  </div>

  <button type="submit">
    ارسال پیام
  </button>
</form>

در این ساختار:

  • form محدوده فرم را مشخص می‌کند.

  • label عنوان هر فیلد را تعریف می‌کند.

  • ویژگی for در Label به id فیلد مربوط متصل می‌شود.

  • required مشخص می‌کند که فیلد باید تکمیل شود.

  • type="email" نوع داده مورد انتظار را مشخص می‌کند.

۱۰.۲. استایل‌دهی با CSS

.contact-form {
  display: flex;
  flex-direction: column;
  gap: 20px;
  width: 100%;
  max-width: 520px;
}

.form-field {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.form-field label {
  color: #243447;
  font-size: 14px;
  font-weight: 600;
}

.form-field input,
.form-field textarea {
  width: 100%;
  padding: 12px 14px;
  border: 1px solid #d5dce5;
  border-radius: 10px;
  background: #fff;
  color: #243447;
  font: inherit;
  outline: none;
  transition:
    border-color 0.2s ease,
    box-shadow 0.2s ease;
}

.form-field input:focus,
.form-field textarea:focus {
  border-color: #2563eb;
  box-shadow: 0 0 0 3px rgb(37 99 235 / 12%);
}

.contact-form button {
  min-height: 46px;
  border: 0;
  border-radius: 10px;
  background: #2563eb;
  color: #fff;
  font: inherit;
  font-weight: 600;
  cursor: pointer;
}

.contact-form button:hover {
  background: #1d4ed8;
}

.contact-form button:focus-visible {
  outline: 3px solid #93c5fd;
  outline-offset: 3px;
}

این نمونه یک ساختار ساده و قابل توسعه برای فرم تماس ایجاد می‌کند. برای پروژه واقعی، مدیریت وضعیت ارسال و نمایش پیام‌های خطا نیز باید به آن اضافه شود.

۱۱. پیاده‌سازی فرم در React و Next.js

در پروژه‌های React، مدیریت مقدار فیلدها، وضعیت ارسال و خطاها معمولاً با State یا کتابخانه‌های مدیریت فرم انجام می‌شود.

نمونه زیر یک فرم ساده با استفاده از Controlled Inputs و اعتبارسنجی اولیه است.

"use client";

import { useState } from "react";

type FormValues = {
  name: string;
  email: string;
};

export default function ContactForm() {
  const [values, setValues] = useState<FormValues>({
    name: "",
    email: "",
  });

  const [errors, setErrors] = useState<
    Partial<FormValues>
  >({});

  function handleSubmit(
    event: React.FormEvent<HTMLFormElement>
  ) {
    event.preventDefault();

    const nextErrors: Partial<FormValues> = {};

    if (!values.name.trim()) {
      nextErrors.name = "نام ضروری است.";
    }

    if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(values.email)) {
      nextErrors.email = "ایمیل معتبر نیست.";
    }

    setErrors(nextErrors);

    if (Object.keys(nextErrors).length > 0) {
      return;
    }

    // Submit data to the server here.
  }

  return (
    <form onSubmit={handleSubmit} noValidate>
      <div>
        <label htmlFor="name">نام</label>

        <input
          id="name"
          name="name"
          value={values.name}
          aria-invalid={Boolean(errors.name)}
          onChange={(event) => {
            setValues((current) => ({
              ...current,
              name: event.target.value,
            }));
          }}
        />

        {errors.name && <p>{errors.name}</p>}
      </div>

      <div>
        <label htmlFor="email">ایمیل</label>

        <input
          id="email"
          name="email"
          type="email"
          value={values.email}
          aria-invalid={Boolean(errors.email)}
          onChange={(event) => {
            setValues((current) => ({
              ...current,
              email: event.target.value,
            }));
          }}
        />

        {errors.email && <p>{errors.email}</p>}
      </div>

      <button type="submit">
        ارسال فرم
      </button>
    </form>
  );
}

این نمونه صرفاً منطق اولیه فرم را نشان می‌دهد و برای استفاده در محیط واقعی باید مدیریت درخواست سرور، وضعیت Loading، پیام موفقیت، ارتباط پیام خطا با فیلدها و اعتبارسنجی سمت سرور نیز پیاده‌سازی شود.

نکته معماری در Next.js: بهتر است بخش‌های تعاملی فرم در Client Component قرار بگیرند و عملیات حساس یا پردازش داده‌ها در سمت سرور انجام شوند. همچنین اطلاعات ارسالی باید در بک‌اند مجدداً اعتبارسنجی شوند.

مستندات رسمی: Next.js - Forms

۱۲. کتابخانه‌های کاربردی برای مدیریت فرم در React

در پروژه‌های بزرگ، مدیریت دستی تمام فیلدها، خطاها و وضعیت‌های فرم می‌تواند پیچیده شود.

کتابخانه‌های تخصصی کمک می‌کنند منطق فرم ساختارمندتر و قابل نگهداری‌تر باشد.

کتابخانه

کاربرد

ویژگی مهم

React Hook Form

مدیریت فرم

تمرکز بر عملکرد و کاهش رندرهای غیرضروری

Zod

اعتبارسنجی داده‌ها

تعریف Schema و بررسی نوع داده

Formik

مدیریت فرم

کنترل مقدارها و خطاها

Yup

اعتبارسنجی

تعریف قوانین اعتبارسنجی

TanStack Form

مدیریت فرم

مدیریت ساختارمند فرم‌های پیچیده

React Hook Form

این کتابخانه برای مدیریت فرم در React طراحی شده و امکاناتی مانند ثبت فیلدها، مدیریت خطاها و ارسال اطلاعات را فراهم می‌کند.

مستندات: React Hook Form

Zod

Zod یک کتابخانه اعتبارسنجی مبتنی بر Schema است که می‌تواند برای بررسی ساختار و نوع داده‌ها استفاده شود.

مستندات: Zod

ترکیب React Hook Form و Zod

یکی از ترکیب‌های رایج در پروژه‌های React استفاده از React Hook Form برای مدیریت فرم و Zod برای تعریف قوانین اعتبارسنجی است.

این جداسازی باعث می‌شود منطق مدیریت وضعیت فرم از قوانین اعتبارسنجی داده‌ها مستقل‌تر باشد و نگهداری آن‌ها ساده‌تر شود.

۱۳. اشتباهات رایج در طراحی فرم

برخی اشتباهات کوچک در طراحی فرم می‌توانند تجربه کاربری را به‌شدت تحت تأثیر قرار دهند.

۱. استفاده از Placeholder به‌جای Label: با وارد کردن اطلاعات، عنوان فیلد ناپدید می‌شود و کاربر ممکن است کاربرد آن را فراموش کند.

۲. دریافت اطلاعات غیرضروری: تعداد زیاد فیلدها باعث افزایش زمان تکمیل فرم می‌شود.

۳. نمایش پیام خطای نامفهوم: پیام خطا باید دقیقاً مشکل را توضیح دهد.

۴. پاک کردن اطلاعات پس از خطا: در صورت بروز مشکل، بهتر است مقدارهای واردشده حفظ شوند.

۵. نبود وضعیت Loading: کاربر ممکن است تصور کند دکمه کار نمی‌کند و چندین بار آن را انتخاب کند.

۶. اعتبارسنجی فقط در سمت کلاینت: داده‌های ارسالی باید در سرور نیز بررسی شوند.

۷. طراحی نامناسب برای موبایل: فیلدهای کوچک و فاصله‌های نامناسب، ورود اطلاعات را دشوار می‌کنند.

۸. استفاده بیش از حد از فیلدهای اختیاری: دریافت اطلاعات اضافی بدون هدف مشخص باعث پیچیدگی فرم می‌شود.

۹. نبود پیام موفقیت: کاربر باید بداند عملیات با موفقیت انجام شده است.

۱۰. نادیده گرفتن دسترس‌پذیری: فرم باید برای کاربران کیبورد و فناوری‌های کمکی نیز قابل استفاده باشد.

۱۴. چگونه یک فرم حرفه‌ای طراحی کنیم؟

برای طراحی یک فرم استاندارد، بهتر است فرایند کار را مرحله‌به‌مرحله پیش ببریم.

  1. هدف فرم را مشخص کنید: دقیقاً تعیین کنید فرم چه اطلاعاتی را باید دریافت کند و چه عملیاتی انجام می‌دهد.

  2. فیلدهای ضروری را انتخاب کنید: فقط اطلاعات موردنیاز را دریافت کنید.

  3. ساختار اطلاعات را مشخص کنید: فیلدهای مرتبط را گروه‌بندی و مرتب کنید.

  4. کامپوننت‌های مناسب را انتخاب کنید: نوع Input، Select، Checkbox و سایر عناصر را بر اساس داده موردنیاز تعیین کنید.

  5. حالت‌های مختلف را طراحی کنید: Default، Focus، Error، Success و Loading باید مشخص باشند.

  6. قوانین اعتبارسنجی را تعریف کنید: برای هر فیلد شرایط معتبر بودن اطلاعات را تعیین کنید.

  7. نسخه واکنش‌گرا را طراحی کنید: فرم را در اندازه‌های مختلف نمایشگر بررسی کنید.

  8. دسترس‌پذیری را بررسی کنید: ارتباط Label و Input، ترتیب فوکوس و نمایش خطاها را آزمایش کنید.

  9. عملکرد فرم را تست کنید: ارسال موفق، خطای سرور، ورودی نامعتبر و قطع ارتباط را بررسی کنید.

۱۵. پرسش‌های متداول درباره طراحی فرم

بهترین روش طراحی فرم در وب‌سایت چیست؟

بهترین روش، طراحی ساده و قابل‌فهم با تعداد فیلدهای ضروری، Label مشخص، پیام‌های خطای کاربردی و بازخورد مناسب است.

تفاوت اعتبارسنجی سمت کلاینت و سرور چیست؟

اعتبارسنجی سمت کلاینت در مرورگر انجام می‌شود و بازخورد سریع‌تری ارائه می‌دهد. اعتبارسنجی سمت سرور در بک‌اند انجام می‌شود و برای اطمینان از صحت و امنیت داده‌ها ضروری است.

آیا Placeholder می‌تواند جایگزین Label شود؟

خیر. Placeholder پس از وارد کردن مقدار ناپدید می‌شود؛ بنابراین بهتر است Label مستقل و قابل‌مشاهده باشد.

React Hook Form چیست؟

React Hook Form کتابخانه‌ای برای مدیریت فرم در React است که امکاناتی برای ثبت فیلدها، مدیریت خطاها و ارسال اطلاعات فراهم می‌کند.

Zod چه کاربردی در طراحی فرم دارد؟

Zod برای تعریف Schema و اعتبارسنجی ساختار داده‌ها استفاده می‌شود و می‌تواند در کنار React Hook Form به کار گرفته شود.

چه زمانی از فرم چندمرحله‌ای استفاده کنیم؟

زمانی که فرم طولانی است یا اطلاعات آن در چند گروه منطقی قرار می‌گیرند، تقسیم فرم به مراحل کوچک‌تر می‌تواند تجربه کاربری را بهتر کند.

چگونه فرم را برای موبایل بهینه کنیم؟

با استفاده از چیدمان عمودی، فیلدهای با اندازه مناسب، فاصله کافی، کنترل‌های قابل لمس و جلوگیری از اسکرول افقی می‌توان تجربه بهتری ایجاد کرد.

نتیجه‌گیری

فرم یکی از مهم‌ترین نقاط تعامل کاربران با وب‌سایت است و طراحی صحیح آن می‌تواند فرایندهایی مانند ثبت‌نام، خرید، ارسال درخواست و دریافت اطلاعات را ساده‌تر کند.

برای ساخت یک فرم حرفه‌ای، فقط طراحی ظاهری فیلدها کافی نیست. ساختار اطلاعات، ترتیب فیلدها، وضعیت‌های تعاملی، اعتبارسنجی، نمایش خطا، دسترس‌پذیری و عملکرد باید در کنار یکدیگر در نظر گرفته شوند.

در بخش فنی نیز استفاده از HTML معنایی، CSS استاندارد، React و ابزارهایی مانند React Hook Form و Zod می‌تواند به ایجاد فرم‌هایی قابل توسعه و نگهداری کمک کند.

در نهایت، یک فرم خوب فرمی نیست که بیشترین امکانات را داشته باشد؛ بلکه فرمی است که کاربر بتواند با کمترین ابهام، اطلاعات موردنیاز را وارد کند و نتیجه عملیات خود را به‌وضوح مشاهده کند.

این مطلب برای شما مفید بود؟با لایک کردن، به ما انرژی بدهید
۰ نفر این مطلب را پسندیده‌اند